package com.taotao.manage.service;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.taotao.manage.mapper.ContentCategoryMapper;
import com.taotao.manage.pojo.ContentCategory;

@Service
public class ContentCategoryService extends BaseService<ContentCategory>{
	@Autowired
	private ContentCategoryMapper contentCategoryMapper;

	/**
	 * 保存内容分类
	 * @param contentCategory
	 * @return
	 */
	public Boolean saveContentCategory(ContentCategory contentCategory) {
		super.save(contentCategory);
		ContentCategory pcg = super.queryById(contentCategory.getParentId());
		if (!pcg.getIsParent()) {
			pcg.setIsParent(true);
			super.update(pcg);
		}
		return true;
	}

	/**
	 * 删除内容分类
	 * @param parentId
	 * @param id
	 */
	public void deleteContentCategoryById(Long parentId, Long id) {
		// TODO Auto-generated method stub
		   // 准备集合，存放要删除的所有节点ID
        List<Object> ids = new ArrayList<>();
        // 获取要删除的所有分类及子分类ID
        getSubIds(ids,id);
        // 删除这些分类ID
        super.deleteByIds(ContentCategory.class,"id", ids);
        
        // 判断父节点的isParent状态
        ContentCategory record = new ContentCategory();
        record.setParentId(parentId);
        // 查询父节点下的所有子节点
        List<ContentCategory> list = super.queryByListWhere(record);
        // 如果已经没有子节点，修改父节点的isParent为false
        if(CollectionUtils.isEmpty(list)){
            record = new ContentCategory();
            record.setIsParent(false);
            record.setId(parentId);
            // 修改父节点属性
            super.update(record);
        }
        // TODO 其实这里删除了分类，分类下的内容也应该删除
    }

    private void getSubIds(List<Object> ids, Long pid) {
        // 把当前节点添加到要删除的节点集合中
        ids.add(pid);
        // 查询所有子分类
        ContentCategory category = new ContentCategory();
        category.setParentId(pid);
        List<ContentCategory> list = super.queryByListWhere(category);
        // 判断是否有子节点
        if(!CollectionUtils.isEmpty(list)){
            // 如果有子节点，证明是父节点，那么遍历子节点，然后递归处理
            for (ContentCategory contentCategory : list) {
                getSubIds(ids,contentCategory.getId());
            }
        }
   
	}
}

